home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / gen_vid / 3d_plot.bas < prev    next >
BASIC Source File  |  1983-10-26  |  4KB  |  62 lines

  1. 5 CLS:SCREEN 1
  2. 10 PRINT TAB(14) "3-D PLOTTING": PRINT TAB(14) "------------":PRINT :PRINT
  3. 20 INPUT "HAVE YOU ALREADY ENTERED A NEW EQUATION OF THE FORM Z=F(X,Y) IN LINE 1000";A$: IF LEFT$ (A$,1)="N" THEN PRINT:PRINT :PRINT "  THEN ENTER EQUATION FOR Z IN LINE       NUMBER 1000 BENEATH 'Break in 23','OK'  MESSAGE BELOW."ELSE 25
  4. 21 PRINT "  EXAMPLE:":PRINT
  5. 22 PRINT "1000 Z=EXP(-(X*X+Y*Y))":PRINT :PRINT
  6. 23 PRINT "  THEN START PROGRAM AGAIN BY TYPING       'RUN' OR HITTING F2 FUNCTION KEY.":PRINT :PRINT :STOP
  7. 25 CLS:PRINT  : INPUT  "ENTER GRID WIDTH (1-FINE,50-COARSE): 10 ";A$: IF A$ = "" THEN GW =10: GOTO 35
  8. 30 GW = VAL (A$)
  9. 35 INPUT "ACCURACY (1-FINE,10-POOR): 5 ";A$: IF A$ = "" THEN AC =5: GOTO 50
  10. 40 AC = VAL (A$)
  11. 50 C$ = "-----------": B$="/         /":    C = SQR (2) / 2: GOSUB 500:            OX =96 :OY = 32
  12. 60 SCREEN 1,1
  13. 70 FOR X=XU TO XL STEP -GW*XM: GOSUB 800
  14. 80 FOR Y=YL TO YU STEP AC*YM: GOSUB 1000   : GOSUB 1045: NEXT : Y=YU: GOSUB 1000   : GOSUB 1045: NEXT
  15. 90 X = XL: GOSUB 800: FOR Y = YL TO YU     STEP AC * YM: GOSUB 1000: GOSUB 1045    : NEXT
  16. 95 FOR Y = YL TO YU STEP GW * YM: GOSUB    900
  17. 100 FOR X = XL TO XU STEP AC * XM: K =      (X + TX) / XM * C
  18. 110 GOSUB 1000: GOSUB 1045: NEXT : K =      (XU +TX) / XM * C: GOSUB 1000: GOSUB    1045: NEXT
  19. 115 Y = YU: GOSUB 900: FOR X = XL TO XU     STEP AC * XM: K = (X + TX) / XM * C:    GOSUB 1000: GOSUB 1045: NEXT
  20. 120 INPUT"SAVE PLOT";A$:                 IF LEFT$ (A$,1)="N" THEN END
  21. 130 LOCATE 1,1:INPUT" FILE'S NAME";N$:LOCATE 1,1:PRINT "                                        "
  22. 140 LOCATE 1,1:INPUT" EQUATION";Z$:LOCATE 1,1:PRINT "                                        "
  23. 145 LOCATE 1,1:PRINT N$:LOCATE 1,15:PRINT Z$
  24. 150 BSAVE N$,0,&H4000
  25. 200 'TO RECOVER PICTURE SAVED BY BSAVE,      USE BLOAD AS PER THIS EXAMPLE:              DEF SEG=&HB800                          BLOAD "PICTURE",0
  26. 400 END
  27. 500 CLS
  28. 505 LOCATE 7,16:PRINT C$:LOCATE ,15:        PRINT B$:LOCATE ,14:PRINT B$:           LOCATE ,13:PRINT B$:LOCATE ,12:         PRINT B$:LOCATE ,11:PRINT C$:
  29. 506 LINE (120,1)-(120,125)
  30. 510 LOCATE 6,20:INPUT "X MIN:  -3 ";A$:     IF A$ = "" THEN XL =  -3: GOTO 520
  31. 515 XL = VAL (A$)
  32. 520 LOCATE 13,14:INPUT "X MAX:  3  ";A$:    IF A$ = "" THEN XU =   3: GOTO 530
  33. 525 XU = VAL (A$)
  34. 530 LOCATE 9,2: INPUT "Y MIN:  -3 ";A$:     IF A$ = "" THEN YL =  -3: GOTO 540
  35. 535 YL = VAL (A$)
  36. 540 LOCATE 9,24:INPUT "Y MAX:   3 ";A$:     IF A$ = "" THEN YU =   3: GOTO 550
  37. 545 YU = VAL (A$)
  38. 550 LOCATE 16,16:INPUT "Z MIN:  0  ";A$:    IF A$ = "" THEN ZL =   0: GOTO 560
  39. 555 ZL = VAL (A$)
  40. 560 LOCATE 2,16:INPUT "Z MAX:   1 ";A$:     IF A$ = "" THEN ZU =   1: GOTO 567
  41. 565 ZU = VAL (A$)
  42. 567 LOCATE 20,5:INPUT "SCALING FACTOR: X AXIS = 1";S$: IF S$="" THEN XS=1:       GOTO 570
  43. 569 XS = VAL (S$)
  44. 570 LOCATE 21,21:INPUT "Y AXIS = 1";S$:     IF S$=  "" THEN YS=1: GOTO 572
  45. 571 YS = VAL (S$)
  46. 572 LOCATE 22,21:INPUT "Z AXIS = 1";S$:     IF S$=  "" THEN ZS=1: GOTO 580
  47. 575 ZS = VAL (S$)
  48. 580 ZM =(ZU-ZL)/(160*ZS): XM =(XU-XL)/      (130*XS): YM =(YU-YL)/(180*YS)
  49. 590 TX =0-XL: TY =0-YL: TZ =-80*ZM-ZL:      RETURN
  50. 800 K =(X+TX)/XM*C: Y =YL: GOSUB 1000:      U =I: V =J: RETURN
  51. 900 X =XL: K =(X+TX)/XM*C: GOSUB 1000:      U =I: V =J: RETURN
  52. 999 ' ENTER FORMULA IN LINE 1000  i.e.          Z=SINX+SINY OR Z=SINX-COSY              Z=X*X+Y*Y   OR Z=SINX+COS(2*Y)
  53. 1000 Z=EXP(-(X*X+Y*Y))
  54. 1010 I =OX+(Y+TY)/YM-K:                      J =OY-(Z+TZ)/ZM+K: IF I<0 THEN I=0
  55. 1020 IF I > 319 THEN I= 319
  56. 1030 IF J > 199 THEN J= 199
  57. 1040 IF J <   0 THEN J=   0
  58. 1042 RETURN
  59. 1045 IF(U=0 AND I=0)OR (U=319 AND I=319)     OR(V=0 AND J=0)OR (J=199 AND V=199)     THEN U=I: V=J: RETURN
  60. 1050 LINE (U,V)-(I,J): U=I: V=J: RETURN
  61.  (U=319 AND I=319)     OR(V=0 AND J=0)OR (J=199 AND V=199)     THEN U=I: V=J: RETURN
  62. 1050 LINE (U,V)-(I,J): U=I: V=J: RETURN